<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>

</head>
<body>

    <script>
        // A simple way to check for HTML strings or ID strings
        // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
        var reg = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/;
        var testString = '#abc';
        // Match a standalone tag
        //If a single string is passed in and it's a single tag
        //var rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/;
        //匹配以<开头，后接至少一个ASCII字符可再接空白符，0次或一次/，
        //(?:<\/\1>)?匹配0次或一次  </和前面(\w+)匹配的一样的内容，后跟>
        var rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/;
        testString = "<p></p>";
        console.log(rsingleTag.exec(testString));
        testString= "<p> </p>";
        console.log(rsingleTag.exec(testString));
        testString= "<p ></p>";
        console.log(rsingleTag.exec(testString));
        testString= "<div><p></p></div>";
        console.log(rsingleTag.exec(testString));
        testString = "<img />";
        console.log(rsingleTag.exec(testString));
        testString = "<img  >";
        console.log(rsingleTag.exec(testString));

        console.log(testString.match(rsingleTag));

        //检测HTML代码中是否含有标签、字符代码或数字代码。
        //标签的特征字符是左尖括号“<”,字符代码的特征是“&”，数字代码的特征字符是“&#”。
        //例如特殊符号双引号"的字符代码&quot;数字代码&#34;
        var rhtml = /<|&#?\w+;/;

        //修正自关闭代码
        //(?!area|br|col|embed|hr|img|input|link|meta|param)反前向声明，要求接下来的字符不与其匹配，意思就是如果
        //HTML代码中出现了这些标签，则不做任何处理。
        //(([\w:]+)[^>]*)是第一个分组，其中包含了标签和属性。
        //([\w:]+)是第二个分组，其中只包含了标签。
        var rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig;
        var str = '<div class="abc"/>'.replace(rxhtmlTag,'<$1></$2>');
        console.log(str);

        //提取HTML代码中的标签部分，删除前导空白符和左尖括号(为什么要冒号？？？)
        var rtagName = /<([\w:]+)/;
        str = '<div style="width: 100px;"></div>';
        console.log(rtagName.exec(str));
    </script>
</body>
</html>